package cn.bugstack.springframework.beans.factory.config;

import cn.bugstack.springframework.beans.BeansException;

/**
 *
 *
 *
 * 作者：DerekYRC https://github.com/DerekYRC/mini-spring
 * @description 用于修改新实例化 Bean 对象的扩展点
 * 在调用 Bean 的初始化方法时，Bean 的实例已经创建完成，但是还没有完成初始化。
 * 初始化方法的调用就是 Bean 初始化的最后一步，用于执行一些初始化逻辑，例如初始化属性、准备资源、注册回调等操作。
 * BeanPostProcessor接口也是Spring提供的扩展机制，不同的是BeanPostProcessor接口是在Bean对象执行初始化方法前后，
 * 对Bean对象进行修改、记录、替换等。这部分扩展功能与后面AOP的实现有着密切的联系。
 * @date 2022/3/10
 *  /CodeDesignTutorials
 *
 */
public interface BeanPostProcessor {

    /**
     * 在 Bean 对象执行初始化方法之前，执行此方法
     *
     * @param bean
     * @param beanName
     * @return
     * @throws BeansException
     */
    Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;

    /**
     * 在 Bean 对象执行初始化方法之后，执行此方法
     *
     * @param bean
     * @param beanName
     * @return
     * @throws BeansException
     */
    Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;

}
